import java.util.Stack;

class MyCircularQueue {
    private int [] elem;
    private int front;
    private int rear;
    private int usedSize;
    /**
    * 构造方法
    * @param k K个大小
    */
    public MyCircularQueue(int k) {
       elem = new int[k];
       usedSize = 0;
    }

    /**
    * 入队
    * @param value
    * @return
    */
    public boolean enQueue(int value) {
        if( isFull()) {
            return false;
        }
        elem[rear] = value;
        rear = (rear + 1) % elem.length;
        this.usedSize++;
        return true;
    }

    /**
    * 出队
    * @return
    */
    public boolean deQueue() {
        if( isEmpty()) {
            return false;
        }
        front = (front+1) % elem.length;
        usedSize--;
        return true;
    }

    /**
    * 得到队头元素
    * @return
    */
    public int Front() {
        if( isEmpty()) {
            return -1;
        }
        return elem[front];
    }

    /**
    * 得到队尾元素
    * @return
    */
    public int Rear() {
        if( isEmpty()) {
            return -1;
        }
        return rear == 0 ? elem[elem.length-1] : elem[rear-1];
    }

    /**
    * 当前循环队列是否为空
    * @return
    */
    public boolean isEmpty() {
        if (usedSize == 0) {
            return true;
        }
        return false;
    }

    /**
    * 判断当前队列是否为满
    * @return
    */
    public boolean isFull() {
        if( usedSize == elem.length) {
            return true;
        } else {
            return false;
        }
    }
}